package net.mingsoft.report_data.dao;

import net.mingsoft.report_data.entity.ZkDataFocusArea;
import net.mingsoft.report_data.entity.ZkDataMessageEntity;
import net.mingsoft.report_data.entity.ZkDataMessageLogEntity;
import net.mingsoft.report_data.kafka.avro.ZkReport;
import net.mingsoft.report_data.kafka.entity.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author gengfa
 * @date 22/03/28
 */
public interface ZkMessageDao {
    /**
     * 插入消息
     * @param message kafka消息
     * @return 执行结果
     */
    int insertOneMessage(ZkReport message);

    /**
     * 插入消息解析日志
     * @param logEntity 解析日志
     * @return 插入结果
     */
    int saveMessageParseLog(@Param("entity") ZkDataMessageLogEntity logEntity, @Param("currDate") String currDate);

    /**
     * 查询最近一条更新日日志
     * @return 消息解析日志
     */
    ZkDataMessageLogEntity selectLatestMessageLog();

    /**
     * 查询kafka消息
     * @param id 最后一次解析的ID
     * @return kafka消息
     */
    List<ZkDataMessageEntity> selectMessagesBigThanId(long id);

    /**
     * 查询kafka消息
     * @param types 类型
     * @return kafka消息
     */
    List<ZkDataMessageEntity> selectMessageByTypes(List<String> types);

    /**
     * urn:ga-send:UserCountByConstantly 实时人口
     * @param list 区域人口列表
     * @param inHainan 在海南/外省
     * @param time 时间
     * @return 插入结果
     */
    int insertActivePopulation(@Param("list") List<UserAreaDto> list, @Param("inHainan") int inHainan, @Param("time") String time);

    /**
     * urn:ga-send:UserCountByConstantly 境外人口
     * @param list 区域人口列表
     * @param time 时间
     * @return 插入结果
     */
    int insertForeignPopulation(@Param("list") List<UserAreaDto> list, @Param("time") String time);

    /**
     * urn:ga-send:UserHeatByConstantly 实时海南省人口热力分布
     * @param list 区域人口分布列表
     * @param time 时间
     * @return 插入结果
     */
    int insertHainanPopulation(@Param("list") List<HeatChartDto> list, @Param("time") String time);

    /**
     * urn:ga-send:TravelUserByDay 旅游用户总数
     * @param list 旅游用户数
     * @param time 时间
     * @return 插入结果
     */
    int insertTravelUserPopulation(@Param("list") List<TravelUserAreaDto> list, @Param("time") String time);

    /**
     * urn:ga-send:CoastalUserByDay 沿海人口
     * @param list 沿海市县人口分布
     * @param time 时间
     * @return 插入结果
     */
    int insertCoastalUserPopulation(@Param("list") List<CoastalUserAreaDto> list, @Param("time") String time);

    /**
     * urn:ga-send:SmuggleUserByDay 走私人口分析
     * @param list 人口区域列表
     * @param time 时间
     * @return 插入结果
     */
    int insertSmuggleUserAreaPopulation(@Param("list") List<TravelAreaDto> list, @Param("time") String time);

    /**
     * urn:ga-send:SmuggleUserByDay 走私人口分析
     * @param list 人口出行次数列表
     * @param time 时间
     * @return 插入结果
     */
    int insertSmugglerTravelUserCountPopulation(@Param("list") List<TravelNumberDto> list, @Param("time") String time);

    /**
     * urn:ga-send:SmuggleUserByDay 走私人口分析
     * @param dto 出行时间分布数据
     * @param time 时间
     * @return 插入结果
     */
    int insertSmugglerTravelTimePopulation(@Param("dto") TravelTimeDto dto, @Param("time") String time);

    /**
     * urn:ga-send:SmuggleUserByDay 走私人口分析
     * @param dto 出行距离分布数据
     * @param time 时间
     * @return 插入结果
     */
    int insertSmugglerTravelDistanceDto(@Param("dto") TravelDistanceDto dto, @Param("time") String time);

    /**
     * urn:ga-send:SmuggleUserWordLiveByDay 走私人口职住地
     * @param list 走私工作地分布
     * @param time 时间
     * @return 插入结果
     */
    int insertSmugglerWorkPopulation(@Param("list") List<WordLiveDto> list, @Param("time") String time);

    /**
     * urn:ga-send:SmuggleUserWordLiveByDay 走私人口职住地
     * @param list 走私居住地分布
     * @param time 时间
     * @return 插入结果
     */
    int insertSmugglerHomePopulation(@Param("list") List<WordLiveDto> list, @Param("time") String time);

    /**
     * urn:ga-send:PermanentPopulation 常住人口
     * @param list 常住人口分布
     * @param time 时间
     * @return 插入结果
     */
    int insertPermanentPopulation(@Param("list") List<PermanentPopulationAreaDto> list, @Param("time") String time);

    /**
     * urn:ga-send:FlowPopulationPerHour 流动人口统计
     * @param list 流动人口数量
     * @param time 时间
     * @return 插入结果
     */
    int insertFlowPopulation(@Param("list") List<FlowPopulationAreaDto> list, @Param("time") String time);

    /**
     * urn:ga-send:CoastalPermanentPopulation 沿海常住人口统计
     * @param list 沿海常住人口
     * @param time 时间
     * @return 插入结果
     */
    int insertCoastalPermanentPopulation(@Param("list") List<CoastalPopulationAreaDto> list, @Param("time") String time);

    /**
     * urn:ga-send:CoastalWorkHomePopulation 沿海职住人口统计（每周）
     * @param list 沿海工作人口
     * @param time 时间
     * @return 插入结果
     */
    int insertCoastalWorkPopulation(@Param("list") List<WordLiveDto> list, @Param("time") String time);

    /**
     * urn:ga-send:CoastalWorkHomePopulation 沿海职住人口统计（每周）
     * @param list 沿海居住人口
     * @param time 时间
     * @return 插入结果
     */
    int insertCoastalHomePopulation(@Param("list") List<WordLiveDto> list, @Param("time") String time);

    /**
     * urn:ga-send:CityPopulationFlowPerMonth 城市人口流动态势
     * @param list 城市流动人口
     * @param time 时间
     * @return 插入结果
     */
    int insertCityFlowPopulation(@Param("list") List<CityPopulationAreaDto> list, @Param("time") String time);

    /**
     * urn:ga-send:CitiesBetweenPopulationFlow 沿海职住人口统计（每周/月）
     * @param list 沿海职住人口统计
     * @param time 时间
     * @return 插入结果
     */
    int insertCityMigrationPopulation(@Param("list") List<CitiesBetweenPopulationAreaDto> list, @Param("time") String time);

    /**
     * urn:ga-send:ODPopulationPerHour 将人员出行表按小时统计人员出行量
     * @param entity 按小时统计人员出行量
     * @return 时间
     */
    int insertODPerHourPopulation(ODPopulationPerHourEntity entity);

    /**
     * urn:ga-send:ODDistanceAndCostTimePerDay
     * @param list 平均通勤距离和耗时
     * @param time 时间
     * @return 插入结果
     */
    int insertODAvgData(@Param("list") List<AvgDataDto> list, @Param("time") String time);

    /**
     * urn:ga-send:ODDistanceAndCostTimePerDay
     * @param list 通勤距离数据
     * @param time 时间
     * @return 插入结果
     */
    int insertODDistanceData(@Param("list") List<DistanceDataDto> list, @Param("time") String time);

    /**
     * urn:ga-send:ODDistanceAndCostTimePerDay
     * @param list 通勤耗时数据
     * @param time 时间
     * @return 插入结果
     */
    int insertODCostTimeData(@Param("list") List<CostTimeDataDto> list, @Param("time") String time);

    /**
     * urn:ga-send:ODCostTimeDistributionPerHour
     * @param list 通勤时间分布
     * @param time 时间
     * @return 插入结果
     */
    int insertODCostTimeDistribution(@Param("list") List<ODCostTimeDistributionDto> list, @Param("time") String time);

    /**
     * urn:ga-send:ODWorkHomeDistributionPerMonth
     * @param list 通勤人口地区分布
     * @param time 时间
     * @return 插入结果
     */
    int insertODWorkHomeDistributionData(@Param("list") List<ODWorkHomeDistributionAreaDto> list, @Param("time") String time);

    /**
     * urn:ga-send:TopHotAreaPerDay
     * @param list 热门地点排行
     * @param time 时间
     * @return 插入结果
     */
    int insertTopHotAreaPerDayData(@Param("list") List<TopHotAreaDto> list, @Param("time") String time);

    /**
     * urn:ga-send:InIslandFlowPopulationPerDay
     * @param list 热门地点排行
     * @param time 时间
     * @return 插入结果
     */
    int insertInIslandFlowPopulationData(@Param("list") List<InIslandHotAreaDto> list, @Param("time") String time);

    /**
     * @param list 社管数据
     * @return 插入结果
     */
    int insertSgData(@Param("list") List<ZkDataFocusArea> list);
}
